package org.tri.persistence;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.util.HibernateUtil;
import org.tri.entity.Categoria;

/**
 * Clase Singleton que contiene todas las categorías existentes.
 * @author giaco
 */
public class CategoriaSingleton {
    
    /** Instancia del singleton. */
    private static CategoriaSingleton instance = null;
    /** Lista de categorias existentes. */
    private List<Categoria> categorias;
    
    /**
     * Inicializa el singleton. Obtiene desde la base de datos
     * la lista de categorias existentes.
     */
    private CategoriaSingleton() {
        categorias = new ArrayList<Categoria>();
        Criteria criterio;
        
        //iniciamos la sesión con la base de datos e iniciamos la transaccion
        Session sesion = HibernateUtil.getCurrentSession();
        sesion.beginTransaction();
        
        //creamos una criteria con la clase y coloco el resultado en una lista
        criterio = sesion.createCriteria(Categoria.class);
        categorias = criterio.list();
        
        //commit y cierre de sesion
        sesion.beginTransaction().commit();
        
    }// end constructor
    
    /**
     * Devuelve la única instancia de este singleton.
     * @return instancia del singleton.
     */
    public static CategoriaSingleton getInstance() {
        if(instance == null)
            instance = new CategoriaSingleton();
        
        return instance;
        
    }//end método getInstance
    
    /**
     * Devuelve la lista de categorias asociadas a la instancia.
     * @return lista de categorias.
     */
    public List<Categoria> getListaCategorias() {
        return categorias;
        
    }//end método getListaCategorias

}//end CategoriaSingleton
